package core

import (
	"fmt"
	"gin_study_blog/common"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"time"
)

func InitGorm() *gorm.DB {
	if common.Config.Mysql.Host == "" {
		common.Log.Warnln("未配置mysql连接地址，取消gorm连接")
		return nil
	}

	dsn := common.Config.Mysql.Dsn()

	var mysqlLogger logger.Interface
	if common.Config.System.Env == "debug" {
		// 开发环境显示所有的sql
		mysqlLogger = logger.Default.LogMode(logger.Info)
	} else {
		// 只打印错误的 sql
		mysqlLogger = logger.Default.LogMode(logger.Error)
	}
	// 开启默认 gorm 日志功能
	common.MysqlLog = logger.Default.LogMode(logger.Info)

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: mysqlLogger,
	})
	if err != nil {
		common.Log.Fatalf(fmt.Sprintf("[%s] mysql 连接失败", err))
	}

	sqlDb, _ := db.DB()
	sqlDb.SetMaxIdleConns(10)               //最大空闲连接数
	sqlDb.SetMaxOpenConns(100)              // 最多可容纳
	sqlDb.SetConnMaxLifetime(time.Hour * 5) // 连接最大复用时间，不能超过 mysql的wait_timeout
	return db
}
